package main

import (
	"fmt"
)

func modify(n [5]int)  {
	n[0] = 666
	fmt.Println("modify n =", n)
}

func modify1(o *[5]int)  {
	(*o)[0] = 666
	fmt.Println("modify1 o =", (*o))
}

func main()  {
	//声明数组
	var a [10]int

	k := 0
	//循环给数组赋值
	for i := 0; i < len(a); i++ {
		k++
		a[i] = k
	}

	//遍历数组
	for i, data := range a{
		fmt.Printf("a[%d] = %d\n", i, data)
	}

	//数组的初始化
	b := [5]int{1, 2, 3, 4, 5}
	fmt.Println(b)

	//初始化一部分
	c := [5]int{1, 2, 3}
	fmt.Println(c)

	//指定下标初始化
	d := [5]int{1:3, 3:6}
	fmt.Println(d)

	//多维数组定义
	//有几个[]就有几维
	//有多少个[]就用几个for
	var e [3][4]int
	for i := 0; i < 3; i++ {
		z := 0
		for j := 0; j < 4; j++ {
			z++
			e[i][j] = z
			fmt.Printf("e[%d][%d] = %d\t", i, j, e[i][j])
		}
		fmt.Printf("\n")
	}

	//多维数组初始化
	f := [3][4]int{{1, 2, 3, 4},{1, 2, 3},{1:3,3:4}}
	fmt.Println(f);

	//数组的比较
	g := [5]int{1, 2, 3, 4, 5}
	h := [5]int{1, 2, 3, 4, 5}
	l := [5]int{1, 2, 3}
	fmt.Println("g == h", g ==h)
	fmt.Println("g == l", g ==l)

	//数组赋值，只能用于同类型
	m := l
	fmt.Println(m)

	//数组作为函数参数时传递值，不是地址，在函数里的数组操作不会影响到外面
	n := [5]int{1, 2, 3, 4, 5}
	modify(n)
	fmt.Println("main n =", n)

	o := [5]int{1, 2, 3,  4, 5}
	modify1(&o)
	fmt.Println("main o =", o)
}